package top.huntwolf.admin.common.enums;


import java.util.Objects;

public interface EnumValue {

    /*序列化*/
    Object toValue();

    /*获取Desc的值*/
    Object desc();

    /*反序列化*/
    static <T extends Enum<T> & EnumValue> T valueOf(Class<T> enumType,Object value){
        if (enumType == null || value == null){
            return null;
        }

        T[] enumConstants = enumType.getEnumConstants();
        for (T enumConstant : enumConstants) {
            //通过自定义desc判断枚举类
            Object enumDesc = enumConstant.desc();
            if (Objects.equals(enumDesc,value) || Objects.equals(enumDesc.toString(),value.toString())){
                return enumConstant;
            }

            //通过自定义定义下标判断枚举类
            Object enumValue = enumConstant.toValue();
            if (Objects.equals(enumValue,value) || Objects.equals(enumValue.toString(),value.toString())){
                return enumConstant;
            }

        }
        return null;
    }
}
